真心推荐的好书《编程珠玑》
关注我们丨文末赠书
青南:我刚毕业的时候就买过《编程珠玑》,这真的是一本好书,对我早期的代码提升有非常大的帮助。推荐大家看看。
说起IT编程经典,我们总是绕不开《编程珠玑》。距离这本书首次问世已有近40年之久了,中文版也已经出版近15年。以计算机和互联网的发展速度而言,别说是40年,哪怕只有几个月也足够让一项技术更新得“面目全非”。那么这一本1986年就面世的《编程珠玑》,为何至今仍能畅销全球,且被业内大牛誉为编程“奇书”?
对于这个问题,我们邀请了一位老朋友——资深技术人高博,来和大家聊聊《编程珠玑》。
▲ 点击图片,与大师交流
▲ 《编程珠玑》姊妹篇,再续经典
01
高博与《编程珠玑》的故事
“第一次读《编程珠玑》还是在大学里,当时的互联网虽然还不像现在这样发达。”当《编程珠玑》刚刚进入国内,高博就有机会拜读了这本书。和其他读过《编程珠玑》的人一样,高博被这本书深深地震撼了。
“《编程珠玑》的厉害之处,在于它从一个程序设计大师的视角出发直击编程这件事情的‘要害’,直接教你老师傅是怎么想问题,以及怎么着手做事。”
编程其实无非两件事情,第一要正确地实现功能,第二要取得尽可能好的时空性能,《编程珠玑》整本书就是在全面细致地展开这两个主题。但是《编程珠玑》与众不同的地方有三点:
要熟练掌握基础算法和数据结构
《编程珠玑》特别强调基础算法和数据结构的熟练掌握和灵活运用。也就是说,我们不能只掌握到去调用库函数,而是要深入了解基础算法和数据结构是怎么实现,在不同的场景下应该怎么选择,在默认实现不能满足需要的时候要怎么改造它们的关键部分。
为代码建立自动化验证工具
《编程珠玑》极力建议大家养成为编写的代码建立配套的自动化验证工具的习惯,这一点可以说是检验程序员是业余还是专业的分野。专业程序员写出来的每一行代码都是要用在生产环境里作为生产力的。
这里不得不提到一个词,工业级代码。什么叫工业级代码?
工业级代码必须是能站得住脚的,不能只建立在直觉和短期的思考之上。在作为功能的代码周围要建立起一系列验证设施,以确保它们能够应对千变万化的、合法或非法的、甚至是蓄意破坏性的输入。这些设施包括断言和单元测试,等等。
此外,还要保证代码运行的性能在设计限制之内,这就不仅要运用时空剖析工具,更重要的是要回归原理,反思是不是能通过换用或改造算法和数据结构来获得性能提升。
设计和构建工业级代码,要求我们熟练地运用各种第三方工具,保证生产环境中运行的代码实现选用了最合理的算法和数据结构,并且有着可验证、可分析的功能和性能,这些都是专业程序员的必备素养。
要不断提升品味,不断反思代码
最重要的一点,这是书里没有明确地写出来,而是在字里行间透射出来的,就是要不断地提升作为程序员的品味,不断地反思已经写完的代码。
能不能让我写的代码更健壮、更有可移植性、跑得更快、占用的资源更少……
这样的追求在时下浮躁的行业气氛中要求很高,对于程序员来说,要在巨大的进度压力下做到这些很不容易。但是如果要不断提高自己,成为更专业的程序员,就必须不断地自问,并在日常工作中做出选择。
“我想,这就是阅读《编程珠玑》能够给我们带来的字面上的实务指导,还有隐含在字面下的精神力量。”
《编程珠玑》的作者Jon Bentley曾经说过,“计算机编程充满乐趣,有时候,它既是门优雅的科学,还要靠它去开发和使用新的软件工具。”
正如自然界里珍珠出自细沙对牡蛎的磨砺,Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。
书中的真实历史案例和练习题以及部分练习题的提示与解答,非常适合自学。阅读这两本书时,读者需要备有纸和笔,最好还有一台计算机在手边,边读边想、边想边做,这样才能将阅读这两本书的收益最大化。
“如果你有志于成为一个优秀的软件工程师,那么你一定要仔细地读一读《编程珠玑》。”
书里讲的算法和工具固然重要,但要明白这些都是例子,仅仅掌握这些例子本身是远远不够的。必须要举一反三,吃透为什么要选择这些算法和工具,它们为什么适用于书里讲到的问题和场景,对于自己在面对的问题和场景又应该怎么做。
“如果你勤于思考,我建议你每隔一段时间就重读一次,每次重读都会读出新的体会来,而这种体验恰恰说明你自己确实有提高了!”
02
一本“奇书”是如何诞生的
《编程珠玑》的作者乔恩.本特利(Jon Bentley)是世界著名计算机科学家,被誉为影响算法发展的十位大师之一。他先后任职于卡内基-梅隆大学、贝尔实验室和Avaya实验室。
在卡内基-梅隆大学担任教授期间,他培养了包括Tcl语言设计者John Ousterhout、Java语言设计者James Gosling、《算法导论》作者之一Charles Leiserson在内的许多计算机科学大家。
上个世纪80年代,Bentley以技术人员的身份常驻贝尔实验室,但他一直有一个梦想:“我希望能让每程序员都能学到东西。”
因此Bentley一直将自己的工作历程发布在《ACM通讯》杂志上,希望能够帮助热爱编程的年轻人开阔眼界。ACM非常支持Bentley,并且为Bentley设置了一个颇具传奇色彩的“编程珠玑”(Programming Pearls)专栏 。
在这些文章中,Bentley从工程实现的角度出发,为程序员们提供了一个个艰难问题的解决方案,犹如一颗颗闪闪发亮的珍珠。Bentley的“珍珠”超出了可靠工程学的范畴,利用他的洞察力和创造力为那些恼人的问题提供了独特而巧妙的解决方案。因此,Bentley便成了风靡一时的“爱豆”,可以说,那时热爱编程的人几乎都迷恋他。
后来在ACM的鼓励下,Bentley将“编程珠玑”系列仔细修订和补充整理,对各篇文章的先后次序做了精心编排。于是,现在我们看到的这本涵盖从算法理论到软件工程各种主题的《编程珠玑》正式诞生。
▲ 1986年出版的第一版《编程珠玑)
(Programming Pearls)
后来Bentley又出版了《编程珠玑(续)》。在《编程珠玑(续)》中,Bentley将书中的例子都改用当时火爆的C语言书写,并多处提到如何用C++和Java中的类来实现,因此大部分程序员阅读起来都比较轻松,导致这两本书一出版几乎卖断货。
03
《编程珠玑》到底写了什么
《编程珠玑》围绕程序设计人员面对的一系列实际问题展开。作者以其独有的洞察力和创造力,引导读者理解这些问题并学会解决方法,而这些正是程序员实际编程生涯中至关重要的。本书的特色是通过一些精心设计的有趣而又颇具指导意义的程序,对实用程序设计技巧及基本设计原则进行了透彻而睿智的描述,为复杂的编程问题提供了清晰而完备的解决思路。
我们用一个简单的思维导图展示《编程珠玑》两本书的内容框架,而蕴含其中的精华内容,还需读者集中注意力,仔细阅读。
▲ 《编程珠玑 第2版》与《编程珠玑 续》内容对比
如今,Bentley已经69岁了,而《编程珠玑》也已走过36个年头。这个从10几岁就热爱编程的老人用了50几年的时间来研究它。50几年里,一路奉献着自己的研究成果,未来他也会一直在自己最爱的事业上抛洒热血。而对于我们这些后辈来说,读《编程珠玑》,正当其时!
—END—
感谢异步图书支持,我们继续留言送书
在留言区参与互动,并点击在看和转发活动到朋友圈,我们将选4名读者获得赠书1本,截止时间9月20日。
END
我的爬虫架构课开课啦!
爬虫架构进阶就在这里
送未闻Code知识星球一年订阅!
未闻 Code·知识星球开放啦!
一对一答疑爬虫相关问题
职业生涯咨询
面试经验分享
每周直播分享
......
未闻 Code·知识星球期待与你相见~
一二线大厂在职员工
十多年码龄的编程老鸟
国内外高校在读学生
中小学刚刚入门的新人
在“未闻 Code技术交流群”等你来!
入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)
好文和朋友一起看~